import { request, initBaseUrl, getFullImageUrl } from '../../utils/request';
import { getToken } from '../../utils/auth';
import Header from '@/components/common/Header.vue';
export default {
    components: {
        Header
    },
    data() {
        return {
            activeTab: 0,
            tabList: ['我接的单', '我的发布'],
            activeFilter: 1, // 默认选中"进行中"
            filterList: [
                { text: '全部', badge: '' },
                { text: '未读', badge: 0 }, // 初始化为0
                { text: '已读', badge: 0 } // 初始化为0
            ],
            list: [],
            page: 1,
            pageSize: 10,
            hasMore: true,
            apiUrl: 'MyJobs/index', // 请替换为实际的后端接口地址  
            hasShownLoginTip: false // 标记是否已经显示过登录提示
        }
    },
    // 添加页面显示时的事件注册
    onShow() {
        // 重置登录提示标记，允许在页面重新显示时再次提示
        this.hasShownLoginTip = false;
        
        // 检查登录状态
        if (this.checkLogin()) {
            this.listenWebSocketMessage();
            this.getUnreadStatistics();
        }
    },

    // 添加页面隐藏时的事件注销
    onHide() {
        uni.$off('websocket-message');
    },

    async onLoad() {
        try {
            await initBaseUrl();
            // 检查登录状态
            if (!this.checkLogin()) {
                return;
            }
            await this.getData();
            this.updateBadges();
            // 确保此调用被执行
            console.log('开始调用getUnreadStatistics');
        } catch (error) {
            console.error('页面加载失败:', error);
        }
    },
    methods: {
        // 检查登录状态
        checkLogin() {
            const token = getToken();
            if (!token) {
                // 如果还没有显示过登录提示
                if (!this.hasShownLoginTip) {
                    uni.showToast({
                        title: '请先登录',
                        icon: 'none',
                        duration: 2000
                    });
                    this.hasShownLoginTip = true;
                }
                // 清空数据
                this.list = [];
                this.hasMore = false;
                return false;
            }
            return true;
        },

        // 新增：获取未读统计
        async getUnreadStatistics() {
            // 检查登录状态
            if (!this.checkLogin()) {
                return;
            }
            const res = await request({ url: 'MyJobs/unreadStatistics' });
            if (res.code === 200) {
                // 合并所有未读消息数
                const totalUnread = (res.data.received_unread || 0) + (res.data.published_unread || 0) + (res.data.group_unread || 0);
                
                if (this.activeTab === 0) {
                    // 更新筛选栏徽章（我接的单+群聊未读）
                    this.$set(this.filterList[1], 'badge', (res.data.received_unread || 0) + (res.data.group_unread || 0));
                } else {
                    // 更新筛选栏徽章（我的发布+群聊未读）
                    this.$set(this.filterList[1], 'badge', (res.data.published_unread || 0) + (res.data.group_unread || 0));
                }
            }
        },
        // 新增：定义 updateBadges 方法
        updateBadges() {
            this.getUnreadStatistics();
        },
        getFullImageUrl,
        // 切换 Tab
        changeTab(index) {
            // 检查登录状态
            if (!this.checkLogin()) {
                return;
            }
            this.activeTab = index;
            // 根据 Tab 切换接口地址
            this.apiUrl = index === 0 ? 'MyJobs/index' : 'MyJobs/published';
            this.resetPagination(); // 重置分页
            this.getUnreadStatistics();
        },
        listenWebSocketMessage() {
            // 先注销避免重复注册
            uni.$off('websocket-message');
            uni.$on('websocket-message', (message) => {
                try {
                    console.log('在 index.js 中接收到 WebSocket 消息:', message);
                    
                    // 新增：检查是否是pong消息，如果是则跳过处理
                    if (message === 'pong') {
                        console.log('收到pong心跳消息，跳过处理');
                        return;
                    }
                    
                    const parsedMessage = JSON.parse(message);

                    // 1. 添加消息类型过滤 - 允许群聊消息和indexnews
                    if (parsedMessage.type !== 'indexnews' && parsedMessage.type !== 'group_chat') return;

                  

                    // 3. 查找对应的job项
                    const jobIndex = this.list.findIndex((listItem) => listItem.job_id === parsedMessage.jobId);
                    if (jobIndex !== -1) {
                        const jobItem = this.list[jobIndex];
                        // 判断是单人还是多人接单场景
                        if (Array.isArray(jobItem.employer)) {
                            console.log('多人接单场景');
                            // 判断是群聊还是私聊
                    if (parsedMessage.type === 'group_chat') {
                        // 群聊消息处理
                        console.log('群聊消息处理');
                        console.log(parsedMessage);
                        // 更新群聊未读消息数
                        this.$set(jobItem, 'group_unread', parsedMessage.unread);
                        // 更新群聊最后一条消息
                        this.$set(jobItem, 'group_lastMsg', parsedMessage.lastMsg);
                        // 更新筛选栏徽章（包含群聊未读）
                        this.getUnreadStatistics();
                    } else if (Array.isArray(jobItem.employer)) {
                        // 多人接单 - 遍历雇主列表找到匹配的用户
                        const empIndex = jobItem.employer.findIndex(emp => emp.user_id === parsedMessage.worker_id);
                        if (empIndex !== -1) {
                            console.log('多人接单场景更新1');
                            // 更新对应雇主的未读消息数和最后一条消息
                            this.$set(jobItem.employer[empIndex], 'lastMsg', parsedMessage.lastMsg);
                            this.$set(jobItem.employer[empIndex], 'unread', parsedMessage.unread);
                        }
                    }
                        } else {
                            console.log('单人接单场景');
                            // 单人接单 - 直接更新雇主信息
                            this.$set(jobItem.employer, 'lastMsg', parsedMessage.lastMsg);
                            this.$set(jobItem.employer, 'unread', parsedMessage.unread);
                        }
                        this.$set(this.filterList[1], 'badge', parsedMessage.unreadCount);
                    }
                    this.updateBadges();
                    this.getUnreadStatistics();
                } catch (error) {
                    // 4. 添加错误捕获
                    console.error('index.js WebSocket消息处理失败:', error);
                }
            });
        },
        // 切换筛选
        changeFilter(index) {
            this.activeFilter = index;
            this.resetPagination(); // 重置分页
        },

        // 重置分页参数
        resetPagination() {
            this.page = 1;
            this.list = [];
            this.hasMore = true;
            this.getData();
        },

        // 获取数据（从后端接口请求）
        async getData() {
            // 检查登录状态
            if (!this.checkLogin()) {
                return;
            }
            request({
                url: `${this.apiUrl}?page=${this.page}&pageSize=${this.pageSize}`,
                method: 'GET',
                success: (res) => {
                    if (res.statusCode === 200) {
                        let newData = res.data.data;

                        // 判断是否还有更多数据
                        if (newData.length < this.pageSize) {
                            this.hasMore = false;
                        }
                        // 处理“我的发布”数据展平
                        if (this.activeTab === 1) {
                            newData = newData.map(job => ({
                                ...job,
                                job_id: job.jobId || job.id, // 添加job_id赋值
                                group_unread: job.group_unread || 0, // 初始化群聊未读数
                                group_lastMsg: job.group_lastMsg || '暂无消息', // 初始化群聊最后一条消息
                                employer: job.employer && Array.isArray(job.employer)
                                    ? job.employer.filter(e => e.avatar && e.nickname)
                                    : []
                            }));
                        } else {
                            // 处理“我接的单”数据，确保群聊未读数被初始化
                            newData = newData.map(job => ({
                                ...job,
                                group_unread: job.group_unread || 0, // 初始化群聊未读数
                                group_lastMsg: job.group_lastMsg || '暂无消息', // 初始化群聊最后一条消息
                            }));
                        }
                        // 合并数据
                        this.list = [...this.list, ...newData];
                        this.page++;
                        this.updateBadges(); // 数据加载后更新badge
                    } else {
                        console.error('请求失败:', res.errMsg);
                    }
                },
                fail: (err) => {
                    console.error('请求出错:', err);
                }
            });
        },

        // 新增：处理群聊点击
        handleGroupChat(item) {
            // 跳转到群聊页面并传递必要参数
            uni.navigateTo({
                url: `/pages/chat/group-chat?jobId=${item.job_id}&room_id=${item.room_id}&groupTitle=${item.title}`
            });
            
            // 清零群聊未读消息
            if (item.group_unread > 0) {
                this.$set(item, 'group_unread', 0);
                this.updateBadges();
            }
        },

        // 原有代码：处理聊天点击
        handleChat(item) {
            // 跳转到聊天详情页并传递必要参数
            uni.navigateTo({
                url: `/pages/chat/chat-detail?statusImage=${getFullImageUrl(item.statusImage)}&jobId=${item.job_id}&session_id=${item.session_id}&otherUserId=${item.employer.id}&otherUserName=${item.employer.nickname}&otherAvatar=${item.employer.avatar}`
            });
        },
        // 将方法参数从item改为emp
        handleChats(item, emp) {
            uni.navigateTo({
                url: `/pages/chat/chat-detail?statusImage=${getFullImageUrl(item.statusImage)}&jobId=${item.job_id}&session_id=${emp.session_id}&otherUserId=${emp.user_id}&otherUserName=${emp.nickname}&otherAvatar=${emp.avatar}`
            });
        }
    }
}
